namespace ts_study_3 {
  /**
   *TS中 interface定义类接口
   * 1. 应用场景： + 在类型层面用于定义对象、数组、函数和混合类型 
   *           + 在运行时定义用来让类实现的接口，来约束类的定义。
   * 2. 定义接口：interface 关键字定义接口。接口可以包含属性和方法的签名，但不包含具体的实现。
   * 3. 实现接口：使用 implements 关键字让类实现接口，并提供接口中定义的属性和方法的具体实现。
   * 4. 注意事项： 类实现接口时，接口中的属性和方法必须在类中全部实现（类似于抽象方法）多个接口同理
   *             如果不同接口中有相同的方法签名，类只需要实现一次即可
   *             接口只能定义属性和方法的类型签名，而不能提供具体的实现。
   *             接口之间可以继承，一个接口可以继承多个接口。继承后的接口可以组合多个接口的成员
   */
   // 3. TS中 interface定义类接口
  // 3.1 定义接口：使用 interface 关键字定义接口。接口可以包含属性和方法的签名，但不包含具体的实现。
  interface Flyable {
    name:string
    fly(): void  //不能具体实现，有方法体是错误的{}
  }

  interface Swimmable {
    name:string
    swim(): void
  }

  // 3.2 实现接口的类: 使用 implements 关键字让类实现接口，并提供接口中定义的属性和方法的具体实现。
 class Bird1 implements Flyable {
  name = '鹦鹉'
  fly():void{
    console.log('鸟在飞翔！');
  }
 }

  // 3.3 一个类实现多个接口：一个类可以通过逗号分隔的方式实现多个接口
  class Duck1 implements Flyable, Swimmable {
    // 实现 Flyable 接口中的 fly 方法
    name = '鸭子'
    fly(): void {
      console.log('鸭子在飞翔');
    }
  
    // 实现 Swimmable 接口中的 swim 方法
    swim(): void {
      console.log('鸭子在游泳');
    }
  }

  // 3.4 注意事项

}